package com.neuedu.javase.myex;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/***
 * 项目名称:  MyJavaSE 
 * 包：  com.neuedu.javase.myex 
 * date:   2025/10/29   10:26  
 * 描述:  \
 *  @author : 张金山
 *  作者博客:   https://blog.fulfill.com.cn
 */
public class UseFinally {


   // public  static String readTxt(){
   //
   //     FileInputStream fileInputStream  = null;
   //     try {
   //         fileInputStream = new FileInputStream(new File("D:\\upload", "ab.txt"));
   //
   //         byte bytes[] = new byte[1024];
   //         int len = -1;
   //         while (  (len = fileInputStream.read(bytes)) != -1){
   //             System.out.println(new String(bytes,0,len));
   //         }
   //
   //
   //      return "方法执行完成";
   //     } catch (Exception e) {
   //         System.out.println("出现错误了");
   //         return "读取失败";
   //     }finally {
   //         //finally 块的优先级 比 return 更高一点
   //         System.out.println("finally语句块");
   //         //关闭资源
   //         try {
   //             if(fileInputStream != null){
   //                 fileInputStream.close();
   //             }
   //         } catch (IOException e) {
   //             throw new RuntimeException(e);
   //         }
   //     }
   //
   //     // return "错误消息";
   // }


    /**
     * return 语句 尽量不要出现 在  try  cath 块中，  而是放到 外部
     * @return
     */
    // public  static String readTxt(){
    //
    //     FileInputStream fileInputStream  = null;
    //     String result = null;
    //     try {
    //         fileInputStream = new FileInputStream(new File("D:\\upload", "ab.txt"));
    //
    //         byte bytes[] = new byte[1024];
    //         int len = -1;
    //         while (  (len = fileInputStream.read(bytes)) != -1){
    //             System.out.println(new String(bytes,0,len));
    //         }
    //
    //
    //         result = "方法执行完成";
    //     } catch (Exception e) {
    //         System.out.println("出现错误了");
    //         result = "读取失败";
    //     }finally {
    //         //finally 块的优先级 比 return 更高一点
    //         System.out.println("finally语句块");
    //         //关闭资源
    //         try {
    //             if(fileInputStream != null){
    //                 fileInputStream.close();
    //             }
    //         } catch (IOException e) {
    //             throw new RuntimeException(e);
    //         }
    //     }
    //
    //     return result;
    // }




    public  static String readTxt(){

        String result = null;
        //  1.7+ try-with-resources 在其中定义的变量 在使用完成之后 会自动的调用close 方法
        //要求 定义的变量 必须似乎 AutoCloseable 的类型（子类型）
        try(FileInputStream fileInputStream =  new FileInputStream(new File("D:\\upload", "ab.txt"))  ) {


            byte bytes[] = new byte[1024];
            int len = -1;
            while (  (len = fileInputStream.read(bytes)) != -1){
                System.out.println(new String(bytes,0,len));
            }


            result = "方法执行完成";
        } catch (Exception e) {
            System.out.println("出现错误了");
            result = "读取失败";
        }

        return result;
    }







    public static void main(String[] args) {
       String msg =  readTxt();
       System.out.println(msg);
    }


}

class MyResource implements  AutoCloseable{

    public MyResource() throws  Exception {
        System.out.println("构造对象");
    }


    public void sayHi(){
        System.out.println("MyResource.sayHi");
    }

    @Override
    public void close() throws Exception {
        System.out.println("释放资源...");
    }


    public static void main(String[] args) {

        //1.7+  try with resoueces AutoCloseable
        try(MyResource resource = new MyResource()){
            resource.sayHi();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
